文章目录
  1. 1. docker -v :rw :ro - CSDN博客
  2. 2. docker -v :rw :ro

docker -v :rw :ro - CSDN博客

docker 同步映射

docker -v :rw :ro

2017年10月31日 19:49:49阅读数:1654

先引用官方文档原话:If neither ‘rw’ or ‘ro’ is specified then the volume is mounted in

read-write mode.(https://docs.docker.com/engine/reference/run/#volume-shared-filesystems)

官方文档说不指定的时候默认是rw模式。

用docker inspect查看容器的属性,可以看到关于挂载目录的详细参数,格式如下:

“Mounts”:

{

“Type”: ,

“Source”: ,

“Destination”: ,

“Mode”: ,

“RW”: ,

“Propagation”:

}

  1. 默认情况不使用:rw :ro选项,Mode的值就是空字符串”“。

  2. 使用:rw选项,Mode的值就是”rw”。

  3. 使用:ro选项,Mode的值就是”ro”。

我们知道docker -v不仅可以挂载映射目录,也可以只挂载映射一个文件。

  1. 如果我们按照1,2设置来挂载目录,宿主主机和docker互相都可以读写同步,如果我们按照1,2设置来挂载文件,这个时候只有docker的写可以同步到宿主主机上面去,宿主主机写不同步到docker。而且一旦宿主主机上写了修改了映射文件,那么docker里面再怎么写都不再同步到宿主主机了。

注意:这里有一个特殊的玩法,假如docker1和docker2都映射了主机上同一个文件到自己的目录,在docker1里面改了文件,docker2内也是同时改变的,就算你在主机上改了文件导致主机和docker1,docker2不再同步了,这个操作还是可以。

  1. 如果我们按照3来挂载目录或者挂载文件,这个时候docker内也不能写,宿主主机写了也不同步进去了,相当于创建的时候拷贝一份不可改变的配置进来而已。

官方文档中有这样一段话:

Note: Many tools used to edit files including vi and sed –in-place may result in an inode change. Since Docker v1.1.0, this will produce an error such as “sed: cannot rename ./sedKdJ9Dy: Device or resource busy”. In the case where you want to edit the mounted file, it is often easiest to instead mount the parent directory.

确实,我们在docker内部运行程序使用shell的sed修改映射文件内容的时候会报错Device or resource busy,我的做法是每次cp一个临时文件出来,然后修改这个临时文件,最后cp -f 强制替换这个映射文件,官方建议我们最好还是用映射目录的方式来互相同步修改。

版权声明:本文为博主原创文章,如需转载请标明出处链接!否则追究法律责任! https://blog.csdn.net/peng314899581/article/details/78407170
个人分类:docker

上一篇2>/dev/null和>/dev/null 2>&1和2>&1 >/dev/null
下一篇源码安装pip

Measure

Measure

文章目录
  1. 1. docker -v :rw :ro - CSDN博客
  2. 2. docker -v :rw :ro